package main

import (
	"fmt"
	"sync"

	"github.com/360EntSecGroup-Skylar/excelize/v2"
)

func processRows(rows [][]string, resultChan chan<- string) {
	// 处理每一行数据
	for _, row := range rows {
		// TODO: 执行数据处理操作
		// 这里只是简单地将每行数据拼接成一个字符串
		resultChan <- fmt.Sprintf("%v\n", row)
	}
}

func main() {
	f, err := excelize.OpenFile("test.xlsx")
	// 打开Excel文件
	if err != nil {
		fmt.Println(err)
		return
	}

	// 读取所有行数据
	rows, err := f.Rows("Sheet1")
	if err != nil {
		fmt.Println(err)
		return
	}

	// 创建一个结果通道
	resultChan := make(chan string)

	// 启动多个goroutine并发处理数据
	go func() {
		for {
			select {
			case result := <-resultChan:
				// 输出处理结果
				fmt.Print(result)
			}
		}
	}()
	// 去掉头表头
	rows.Next()

	var wg sync.WaitGroup
	datas := make([][]string, 0, 5)
	for rows.Next() {
		data, err := rows.Columns()
		if err != nil {
			fmt.Println(err)
			return
		}
		datas = append(datas, data)
		if len(datas) >= 5 {
			wg.Add(1)
			go func(datas [][]string) {
				defer wg.Done()
				processRows(datas, resultChan)
			}(datas)
			datas = nil
		}
	}
	// 剩下的处理完成
	wg.Add(1)
	go func(datas [][]string) {
		defer wg.Done()
		processRows(datas, resultChan)
	}(datas)
	// 等待所有goroutine完成处理
	wg.Wait()
}
